import 'package:flutter/material.dart';

///
/// ListView
/// ListView是最常用的可滚动组件之一，它可以沿一个方向线性排布所有子组件，并且它也支持列表项懒加载（在需要时才会创建）。
/// https://api.flutter-io.cn/flutter/widgets/ListView-class.html
///
///
/// 3中构造方法
/// children[] 直接赋值
///
/// ListView.builder适合列表项比较多或者列表项不确定的情况
/// itemCount  itemBuilder
///
///
/// ListView.separated可以在生成的列表项之间添加一个分割组件，它比ListView.builder多了一个separatorBuilder参数，该参数是一个分割组件生成器
/// itemCount  itemBuilder  separatorBuilder
///
///
/// 性能优化：
/// itemExtent 或 prototypeItem  制定 列表选项的高度
///
///
/// 原理
///  ListView 内部组合了 Scrollable、Viewport 和 Sliver，
///  1.ListView 中的列表项组件都是 RenderBox，并不是 Sliver， 这个一定要注意
///  2.一个 ListView 中只有一个Sliver，对列表项进行按需加载的逻辑是 Sliver 中实现的
/// 3.ListView 的 Sliver 默认是 SliverList，如果指定了 itemExtent ，
/// 则会使用 SliverFixedExtentList；如果 prototypeItem 属性不为空，
/// 则会使用 SliverPrototypeExtentList，无论是是哪个，都实现了子组件的按需加载模型
///
class ListViewViewPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
        appBar: AppBar(
          title: Text("SingleChildScrollView"),
        ),
        body: getListViewbase());
  }
}

getListViewbase() {
  return Container(
    child: ListView(
      children: [
        Card(
          margin: EdgeInsets.all(4.0),
          child: ListTile(
              leading: Icon(Icons.add),
              title: Text("标题"),
              subtitle: Text("内容"),
              trailing: Icon(Icons.next_plan)),
        ),
        Card(
          margin: EdgeInsets.all(4.0),
          child: ListTile(
              leading: Icon(Icons.add),
              title: Text("标题"),
              subtitle: Text("内容"),
              trailing: Icon(Icons.next_plan)),
        ),
        Card(
          margin: EdgeInsets.all(4.0),
          child: ListTile(
              leading: FlutterLogo(
                size: 40.0,
              ),
              title: Text("标题"),
              subtitle: Text("内容"),
              trailing: Icon(Icons.next_plan)),
        ),
        Card(
          child: ListTile(
              title: Text("标题"),
              subtitle: Text("内容"),
              trailing: Icon(Icons.next_plan)),
        ),
      ],
    ),
  );
}






